Networks enable computers and other devices to communicate. For example, networks can carry data representing video, audio, e-mail, and so forth. Typically, data sent across a network is divided into smaller messages known as packets. By analogy, a packet is much like an envelope you drop in a mailbox. A packet typically includes “payload” and a “header”. The packet's “payload” is analogous to the letter inside the envelope. The packet's “header” is much like the information written on the envelope itself. The header can include information to help network devices handle the packet appropriately. For example, the header can include an address that identifies the packet's destination.
Systems receiving packets typically include devices known as Network Interface Controllers (NICs) (a.k.a. Network Adaptors). Traditionally, upon receipt of a packet, a NIC will perform a Direct Memory Access (DMA) of packet data to host memory. This Direct Memory Access frees the host processor from the duty of overseeing transfer of data between memory and the NIC. Once in host memory, the NIC can generate an interrupt to alert a host processor to the arrival of the packet. In response, a protocol stack executed by the host processor typically processes the packet in accordance with different layers of network communication protocols.